class Group{
    constructor(docker,user){
        this.status=0; //0等待匹配  1正在匹配
        this.maxUser=3; //小组最大用户数
        this.docker=docker;
        this.users=[];
        this.groupId=user._id;
        this.join(user);
    }
    getMessage(){
        let obj={
            status:this.status,
            groupId:this.groupId,
            users:[]
        };
        for(let i=0;i<this.users.length;i++){
            obj.users.push(this.users[i].getMessage());
        }
        return obj;
    }
    //用户加入小组
    join(user){
        if(this.users.length<this.maxUser&&this.users.findIndex(item=>{return item._id==user._id})<0){
            user.matchingGroup=this;
            this.users.push(user);
            this.sendEvent('userMatchingGroup',this.getMessage());
        }else if(this.users.findIndex(item=>{return item._id==user._id})>=0){
            this.sendEvent('userMatchingGroup',this.getMessage());
        }else{
            user.sendEvent('userMatchingGroupError',{msg:'队伍已满员'});
        }
    }
    //用户离开小组，如果该小组用户数为0，则从容器干掉这个小组
    exit(user){
        if(user._id==this.groupId){
            this.dissolve();
        }else{
            if(this.status===0){
                let userIndex=this.users.findIndex(item=>{return item._id==user._id});
                if(userIndex>=0){
                    user.matchingGroup=null;
                    this.users.splice(userIndex,1);
                    this.sendEvent('userMatchingGroup',this.getMessage());
                    if(this.users.length===0){
                        this.dissolve();
                    }
                }
            }
        }
    }
    //解散小组
    dissolve(){
        this.sendEvent('userMatchingGroupDissolve',{});
        for(let i=0;i<this.users.length;i++){
            this.users[i].matchingGroup=null;
        }
        this.users=[];
        let groupIndex=this.docker.matchingGroups.findIndex(item=>{return item.groupId==this.groupId});
        if(groupIndex>=0){
            this.docker.matchingGroups.splice(groupIndex,1);
        }
    }
    //给小组所有成员发送消息
    sendEvent(eventName,obj){
        for(let i=0;i<this.users.length;i++){
            this.users[i].sendEvent(eventName,obj);
        }
    }
}

module.exports=Group;